home *** CD-ROM | disk | FTP | other *** search
/ Transactor / Transactor_22_1988_Transactor_Publishing.d64 / fn parser.pal (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  5KB  |  229 lines

  1. 1000 sys700
  2. 1010 ;*********************************
  3. 1020 ;* file-spec parser              *
  4. 1030 ;* sep 21, 1987  version 1.0     *
  5. 1040 ;*                               *
  6. 1050 ;* keath milligan                *
  7. 1060 ;* 11909 swan drive              *
  8. 1070 ;* austin, tx 78750              *
  9. 1080 ;* (512) 331-8451                *
  10. 1090 ;*********************************
  11. 1100 ;
  12. 1110 ;
  13. 1120          .opt oo
  14. 1130 ;
  15. 1140 fnlen    = $b7
  16. 1150 la       = $b8
  17. 1160 sa       = $b9
  18. 1170 fa       = $ba
  19. 1180 fnadr    = $bb
  20. 1190 aptr     = $03
  21. 1200 bptr     = $05
  22. 1210 ;
  23. 1220          lda #<openbp
  24. 1230          ldy #>openbp
  25. 1240          sta 794
  26. 1250          sty 795
  27. 1260          lda #<loadbp
  28. 1270          ldy #>loadbp
  29. 1280          sta 816
  30. 1290          sty 817
  31. 1300          lda #<savebp
  32. 1310          ldy #>savebp
  33. 1320          sta 818
  34. 1330          sta 819
  35. 1340          rts
  36. 1350 ;
  37. 1360 openbp   jsr parse
  38. 1370          jmp $f34a
  39. 1380 ;
  40. 1390 loadbp   pha
  41. 1400          jsr parse
  42. 1410          pla
  43. 1420          jmp $f4a5
  44. 1430 ;
  45. 1440 savebp   jsr parse
  46. 1450          jmp $f5ed
  47. 1460 ;
  48. 1470 ;*** parse routine ***
  49. 1480 ;
  50. 1490 parse    lda fnadr
  51. 1500          sta fnptr+1
  52. 1510          lda fnadr+1
  53. 1520          sta fnptr+2
  54. 1530          lda fa
  55. 1540          sta tdev
  56. 1550          lda sa
  57. 1560          sta tsa
  58. 1570          lda fnlen
  59. 1580          sta ctr
  60. 1590          jsr getfchr
  61. 1600          cmp #"#"
  62. 1610          beq checkfn
  63. 1620          cmp #"d"
  64. 1630          beq checkfn
  65. 1640          cmp #"p"
  66. 1650          bne chkdev
  67. 1660 checkfn  ldx #0
  68. 1670          sta tdname
  69. 1680 getnext  jsr getfchr
  70. 1690          sta tsep
  71. 1700          cmp #":"
  72. 1710          beq fnok
  73. 1720          cmp #","
  74. 1730          beq fnok
  75. 1740          cmp #"0"
  76. 1750          bcc chkdev
  77. 1760          cmp #"9"+1
  78. 1770          bcs chkdev
  79. 1780          inx
  80. 1790          cpx #3
  81. 1800          bne gnext
  82. 1810 chkdev   lda fnlen
  83. 1820          beq parsex
  84. 1830          lda fa
  85. 1840          cmp #1
  86. 1850          bne parsex
  87. 1860          lda #8      ;default drive
  88. 1870          sta fa
  89. 1880 parsex   rts
  90. 1890 gnext    bne getnext
  91. 1900 fnok     cpx #0      ;# of digits
  92. 1910          beq chkdev
  93. 1920          lda fnadr
  94. 1930          sta fnptr+1
  95. 1940          lda fnadr+1
  96. 1950          sta fnptr+2
  97. 1960          lda fnlen
  98. 1970          sta ctr
  99. 1980 ;get pointer on device number
  100. 1990          jsr getfchr
  101. 2000          lda fnptr+1
  102. 2010          sta aptr
  103. 2020          lda fnptr+2
  104. 2030          sta aptr+1
  105. 2040          txa
  106. 2050          jsr asc2wor
  107. 2060          bcs passit
  108. 2070          lda bptr ;device number
  109. 2080          sta tdev
  110. 2090 iloop    jsr getfchr
  111. 2100 parsec   cmp #":"
  112. 2110          beq finishfs
  113. 2120          cmp #","
  114. 2130          beq chksa
  115. 2140          bne iloop
  116. 2150 finishfs lda fnptr+1
  117. 2160          sta fnadr
  118. 2170          lda fnptr+2
  119. 2180          sta fnadr+1
  120. 2190          lda ctr
  121. 2200          sta fnlen
  122. 2210          lda tsa
  123. 2220          sta sa
  124. 2230          lda tdev
  125. 2240          sta fa
  126. 2250          cmp #1
  127. 2260          bne passit
  128. 2270          rts
  129. 2280 passit   jmp chkdev
  130. 2290 chksa    ldx #0
  131. 2300          lda fnptr+1
  132. 2310          sta aptr
  133. 2320          lda fnptr+2
  134. 2330          sta aptr+1
  135. 2340 csaloop  jsr getfchr
  136. 2350          cmp #":"
  137. 2360          beq csaout
  138. 2370          inx
  139. 2380          cpx #4
  140. 2390          beq csaerr
  141. 2400          cmp #"0"
  142. 2410          bcc csaerr
  143. 2420          cmp #"9"+1
  144. 2430          bcc csaloop
  145. 2440 csaerr   rts
  146. 2450 csaout   txa
  147. 2460          beq csaerr
  148. 2470          jsr asc2wor
  149. 2480          lda bptr
  150. 2490          sta tsa
  151. 2500          jmp finishfs
  152. 2510 ;
  153. 2520 getfchr  = *
  154. 2530 fnptr    lda $ffff ;dummy addr
  155. 2540          and #%01111111 ;mask high-bit
  156. 2550          inc fnptr+1
  157. 2560          bne gfc
  158. 2570          inc fnptr+2
  159. 2580 gfc      dec ctr
  160. 2590          cmp #0
  161. 2600          rts
  162. 2610 ;
  163. 2620 tdev     .byt 0
  164. 2630 tsa      .byt 0
  165. 2640 tdname   .byt 0
  166. 2650 ctr      .byt 0
  167. 2660 tsep     .byt 0
  168. 2670 ;
  169. 2680 ;*********************************
  170. 2690 ;* convert decimal ascii to word *
  171. 2700 ;* .a = length of string         *
  172. 2710 ;* aptr points to string         *
  173. 2720 ;* ret- bptr = 16 bit word       *
  174. 2730 ;*      cs = error, cc = ok      *
  175. 2740 ;*********************************
  176. 2750 ;
  177. 2760 ;
  178. 2770 asc2wor  sta declen
  179. 2780          lda #0
  180. 2790          tay 
  181. 2800          ldx declen
  182. 2810          sta bptr
  183. 2820          sta bptr+1
  184. 2830          clc 
  185. 2840 asc2wor1 jsr by10 ;multiply by 10
  186. 2850          bcs asc2worx ;cs - overflow
  187. 2860          lda (aptr),y
  188. 2870          and #%00001111
  189. 2880          clc 
  190. 2890          adc bptr
  191. 2900          sta bptr
  192. 2910          bcc asc2wor2
  193. 2920          inc bptr+1
  194. 2930          sec 
  195. 2940          beq asc2worx ;eq - overflow
  196. 2950 asc2wor2 clc
  197. 2960          iny 
  198. 2970          dex 
  199. 2980          bne asc2wor1
  200. 2990 asc2worx rts
  201. 3000 ;
  202. 3010 ; by10- multiply by 10
  203. 3020 ;
  204. 3030 by10     asl bptr ;x 2
  205. 3040          rol bptr+1
  206. 3050          bcs by10r ;cs - overflow
  207. 3060          lda bptr+1
  208. 3070          pha 
  209. 3080          lda bptr
  210. 3090          pha 
  211. 3100          asl bptr ;x 2
  212. 3110          rol bptr+1
  213. 3120          bcs by10x ;cs - overflow
  214. 3130          asl bptr ;x 2
  215. 3140          rol bptr+1
  216. 3150          bcs by10x ;cs - overflow
  217. 3160          pla 
  218. 3170          adc bptr
  219. 3180          sta bptr
  220. 3190          pla 
  221. 3200          adc bptr+1
  222. 3210          sta bptr+1
  223. 3220 by10r    rts
  224. 3230 by10x    pla
  225. 3240          pla 
  226. 3250          rts
  227. 3260 ;
  228. 3270 declen   .byt 0
  229.